#pragma once
#include <Rz/IObject.h>
#include "ViewerEvents.h"

namespace Rz { namespace Graphics { namespace Render {

class IViewerHandler :
	virtual public IObject
{
	public:
		RZ_RTTI_INTERFACE(Rz::Graphics::Render, IViewerHandler);
		RZ_RTTI_IMPLEMENTS(IObject);
		RZ_RTTI_END;

		virtual bool Init() { return true; }
		virtual void End() { }

		virtual bool Update(f32 time, f32 delta) = 0;

		virtual void OnMouseMove(Events::MouseButton buttons, u32 x, u32 y, s32 dx, s32 dy)
		{
			RZ_UNUSED(buttons);
			RZ_UNUSED(x);
			RZ_UNUSED(y);
			RZ_UNUSED(dx);
			RZ_UNUSED(dy);
		}

		virtual void OnMouseDown(Events::MouseButton button, u32 x, u32 y)
		{
			RZ_UNUSED(button);
			RZ_UNUSED(x);
			RZ_UNUSED(y);
		}

		virtual void OnMouseUp(Events::MouseButton button, u32 x, u32 y)
		{
			RZ_UNUSED(button);
			RZ_UNUSED(x);
			RZ_UNUSED(y);
		}

		virtual void OnKeyDown(Events::Key key, u32 x, u32 y)
		{
			RZ_UNUSED(key);
			RZ_UNUSED(x);
			RZ_UNUSED(y);
		}

		virtual void OnKeyUp(Events::Key key, u32 x, u32 y)
		{
			RZ_UNUSED(key);
			RZ_UNUSED(x);
			RZ_UNUSED(y);
		}
};

} } }
